new Vue({
    el: '#app',
    mixins: [Query],//组件配置文件，路径/utils/components.js
    data() {
        return {
            form: {//查询筛选
                value: '',
                PageNumber: 1, //页码
                RowAmount: 20,
                Condition: utf8ToBase64("%%"),
                ExtensionCondition: utf8ToBase64(getCookie('enterprise') != '1'? `AND store_info.Enterprise_Info_SerialNumber='${getCookie('enterprise')}'`:'')
            },
        }
    },
    mounted() {
        /**
         * 组件配置文件中自动执行方法
         * 1.this.getColumn(); //查询表头数据
         * 2.this.getList(this.form); //查询表格数据
         * 3.this.getTreeData();//查询树
         */
    },
    // 重写 getList 方法，确保查询后从数据库获取正确的 Row_Status
    async getList(data) {
        this.loading = true;
        try {
            const res = await generalApi.generalPaginationQueryBySQLSerialNumber({
                Model_Url: getRelativePath(),
                PaginationNumber: data.PageNumber,
                RowAmount: data.RowAmount,
                Condition: data.Condition,
                ExtensionCondition: data.ExtensionCondition || ''
            })
            this.loading = false;
            this.Total = res.TotalRows;//总数量
            this.tableData = res.Rows;
            
            // 关键修复：从数据库重新查询 Row_Status 字段，确保状态正确
            // 因为后端 SQL 配置可能没有包含 Row_Status 字段，或者查询时被过滤了
            if (res.Rows && res.Rows.length > 0) {
                try {
                    const primaryKey = 'Store_SerialNumber';
                    const tableName = 'store_info';
                    const serialNumbers = res.Rows.map(row => row[primaryKey]).filter(Boolean);
                    
                    if (serialNumbers.length > 0) {
                        // 从数据库查询所有行的 Row_Status
                        const statusData = await generalApi.generalQueryByTableName({
                            Data: tableName,
                            Condition: `${primaryKey} IN (${serialNumbers.map(s => `'${s}'`).join(',')})`
                        });
                        
                        // 创建状态映射表
                        const statusMap = {};
                        statusData.forEach(item => {
                            if (item[primaryKey]) {
                                // 确保状态是字符串格式
                                statusMap[item[primaryKey]] = String(item.Row_Status || '0').trim();
                            }
                        });
                        
                        // 更新每行的 Row_Status
                        res.Rows.forEach((row, index) => {
                            if (row[primaryKey] && statusMap[row[primaryKey]] !== undefined) {
                                // 使用 $set 确保 Vue 响应式更新
                                this.$set(row, 'Row_Status', statusMap[row[primaryKey]]);
                            } else if (!row.Row_Status || row.Row_Status === null || row.Row_Status === undefined) {
                                // 如果查询不到，设置为默认值
                                this.$set(row, 'Row_Status', '0');
                            } else {
                                // 确保是字符串格式
                                const status = String(row.Row_Status).trim();
                                if (status !== row.Row_Status) {
                                    this.$set(row, 'Row_Status', status);
                                }
                            }
                        });
                    }
                } catch (error) {
                    console.error('补充 Row_Status 字段失败:', error);
                    // 如果补充失败，至少确保所有行都有 Row_Status 字段
                    res.Rows.forEach(row => {
                        if (!row.Row_Status || row.Row_Status === null || row.Row_Status === undefined) {
                            this.$set(row, 'Row_Status', '0');
                        }
                    });
                }
            }
            
            this.isUpdate = false;
            this.$nextTick(() => {
                this.isUpdate = true;
            })
        } catch (error) {
            this.loading = false;
            this.$message({
                message: '系统错误，请联系开发者!',
                type: 'error'
            })
        }
    },
    methods: {
        handleSerach() { //筛选
            if (this.form.value) {
                this.form.Condition = utf8ToBase64(`%${this.form.value}%`);
                this.form.ExtensionCondition = utf8ToBase64(getCookie('enterprise') != '1'? `AND store_info.Enterprise_Info_SerialNumber='${getCookie('enterprise')}'`:'');
            } else {
                this.form.Condition = utf8ToBase64("%%");
                this.form.ExtensionCondition = utf8ToBase64(getCookie('enterprise') != '1'? `AND store_info.Enterprise_Info_SerialNumber='${getCookie('enterprise')}'`:'');
            }
            this.form.PageNumber = 1; // 重置到第一页
            this.getList(this.form);
        },
        handleCommand(command, row) {
            try {
                if (typeof this[command] === 'function') {
                    this[command](row);
                } else {
                    this.$message({
                        message: '该操作不存在，请联系开发者!',
                        type: 'error'
                    });
                }
            } catch (error) {
                console.error('执行命令错误：', error);
                this.$message({
                    message: '系统错误，请联系开发者!',
                    type: 'error'
                });
            }
        },
        // 格式化门店类别
        formatStoreType(value) {
            const typeMap = {
                '0': '实体店',
                '1': '网店'
            };
            return typeMap[value] || value;
        },
        // 格式化门店子类别
        formatStoreSubType(value) {
            const subTypeMap = {
                '0': '天猫店',
                '1': '抖音店',
                '2': '美团店',
                '3': '大众点评',
                '4': '京东店'
            };
            return subTypeMap[value] || value;
        },
        // 格式化店铺状态
        formatStoreStatus(value) {
            // 处理 null、undefined、空字符串的情况，默认为 '0'（营业中）
            if (value === null || value === undefined || value === '') {
                return '营业中';
            }
            // 将值转换为字符串进行比较，处理数字和字符串的情况
            const status = String(value).trim();
            const statusMap = {
                '0': '营业中',
                '1': '已删除',
                '2': '已关店'
            };
            const result = statusMap[status];
            // 如果找不到对应的状态，输出调试信息
            if (result === undefined) {
                console.warn('未知的店铺状态值：', value, '类型：', typeof value, '字符串值：', status);
                return '未知';
            }
            return result;
        },
        // 获取店铺状态标签类型
        getStoreStatusType(value) {
            // 处理 null、undefined、空字符串的情况，默认为 '0'（营业中）
            if (value === null || value === undefined || value === '' || value === 'undefined') {
                return 'success';
            }
            // 将值转换为字符串进行比较，处理数字和字符串的情况
            const status = String(value).trim();
            const typeMap = {
                '0': 'success', // 营业中 - 绿色
                '1': 'danger',  // 已删除 - 红色
                '2': 'warning'  // 已关店 - 橙色
            };
            const result = typeMap[status] !== undefined ? typeMap[status] : 'info';
            // 调试信息
            if (status === '2') {
                console.log('getStoreStatusType 输入值:', value, '转换后:', status, '返回类型:', result);
            }
            return result;
        },
        // 关店操作
        handleCloseStore(row) {
            // 检查当前状态，如果已关店或已删除，不允许操作
            const currentStatus = String(row.Row_Status || '0');
            if (currentStatus === '2' || currentStatus === '1') {
                this.$message.warning('该门店已关店或已删除，无法重复操作！');
                return;
            }
            
            this.$confirm('警告！此操作将关店该门店, 是否继续?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
            }).then(async () => {
                this.loading = true;
                try {
                    const { tableName, primaryKey } = $('#table').data('options');
                    let data = await generalApi.generalQueryByTableNameWithOriginal({
                        Data: tableName,
                        Condition: `${primaryKey}='${row[primaryKey]}'`
                    })
                    if (data && data.length > 0) {
                        // 保存原始状态用于调试
                        const originalStatus = data[0].Row_Status;
                        console.log('关店前原始状态:', originalStatus, '类型:', typeof originalStatus);
                        
                        data[0].Row_Status = '2'; // 设置为关店状态
                        data[0].Closed_Date = getYMDDate(); // 设置关店日期为当前日期
                        data[0].Operation_ID = getCookie('user') || ''; // 设置操作人
                        data[0].Operation_Datetime = getYMDHMSDate(); // 设置操作时间
                        
                        console.log('准备保存的数据:', JSON.stringify(data[0], null, 2));
                        
                        let lJSONObject_Modify = new Object();
                        lJSONObject_Modify[tableName] = data;
                        //组合
                        let lJSONObject_DataSet = {
                            Modify: lJSONObject_Modify, Add: {}
                        };
                        let Operation_Main = JSON.stringify(deepClone(lJSONObject_DataSet));
                        lJSONObject_DataSet['Add']['base_operation_log'] = [{
                            Operation_Type: '0',
                            Operation_Path: getRelativePath(),
                            Operation_Description: '关店',
                            Operation_Main,
                            Operation_Interface: "generalSaveByRequestBody",
                            Operation_IP: getIpAddress()
                        }]
                        console.log('保存请求数据:', JSON.stringify(lJSONObject_DataSet, null, 2));
                        const res = await generalApi.generalSaveByRequestBody({
                            Data: lJSONObject_DataSet
                        })
                        console.log('保存响应:', res);
                        if (res.Status == "success") {
                            // 保存成功后，重新查询数据库验证数据是否真的保存了
                            const verifyData = await generalApi.generalQueryByTableNameWithOriginal({
                                Data: tableName,
                                Condition: `${primaryKey}='${row[primaryKey]}'`
                            });
                            console.log('保存后验证查询结果:', verifyData);
                            if (verifyData && verifyData.length > 0) {
                                const savedStatus = verifyData[0].Row_Status;
                                console.log('数据库中保存的状态:', savedStatus, '类型:', typeof savedStatus);
                                if (String(savedStatus) !== '2') {
                                    console.error('警告：保存的状态与预期不符！预期: 2, 实际:', savedStatus);
                                    this.$message.warning('数据保存可能不完整，请刷新页面查看');
                                }
                            }
                            
                            this.$message.success("关店成功");
                            // 直接更新当前行的状态，不刷新整个列表（避免影响其他行）
                            const currentRowIndex = this.tableData.findIndex(item => item[primaryKey] === row[primaryKey]);
                            if (currentRowIndex !== -1) {
                                // 直接更新当前行的状态
                                this.$set(this.tableData[currentRowIndex], 'Row_Status', '2');
                                this.$set(this.tableData[currentRowIndex], 'Closed_Date', getYMDDate());
                                this.$set(this.tableData[currentRowIndex], 'Operation_ID', getCookie('user') || '');
                                this.$set(this.tableData[currentRowIndex], 'Operation_Datetime', getYMDHMSDate());
                            }
                            // 不刷新整个列表，避免影响其他行的状态
                            // 如果需要看到最新数据，用户可以手动刷新或重新查询
                        } else {
                            this.$message.error("关店失败，请重试！");
                            console.error('保存失败，响应:', res);
                        }
                    } else {
                        this.$message.error("未找到该门店数据！");
                    }
                } catch (error) {
                    console.error('关店操作错误：', error);
                    this.$message({
                        message: '系统错误，请联系开发者!',
                        type: 'error'
                    })
                } finally {
                    this.loading = false;
                }
            }).catch(() => {
                // 用户取消操作，不做任何处理
            });
        },
        // 重写删除方法，确保删除后正确显示状态
        handleRemove(row) {
            // 检查当前状态，如果已删除，不允许操作
            const currentStatus = String(row.Row_Status || '0');
            if (currentStatus === '1') {
                this.$message.warning('该门店已删除，无法重复操作！');
                return;
            }
            
            this.$confirm('警告！此操作将删除该数据, 是否继续?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
            }).then(async () => {
                this.loading = true;
                try {
                    const { tableName, primaryKey } = $('#table').data('options');
                    let data = await generalApi.generalQueryByTableNameWithOriginal({
                        Data: tableName,
                        Condition: `${primaryKey}='${row[primaryKey]}'`
                    })
                    if (data && data.length > 0) {
                        // 保存原始状态用于调试
                        const originalStatus = data[0].Row_Status;
                        console.log('删除前原始状态:', originalStatus, '类型:', typeof originalStatus);
                        
                        data[0].Row_Status = '1'; // 设置为删除状态
                        data[0].Operation_ID = getCookie('user') || ''; // 设置操作人
                        data[0].Operation_Datetime = getYMDHMSDate(); // 设置操作时间
                        
                        console.log('准备保存的数据:', JSON.stringify(data[0], null, 2));
                        
                        let lJSONObject_Modify = new Object();
                        lJSONObject_Modify[tableName] = data;
                        //组合
                        let lJSONObject_DataSet = {
                            Modify: lJSONObject_Modify, Add: {}
                        };
                        let Operation_Main = JSON.stringify(deepClone(lJSONObject_DataSet));
                        lJSONObject_DataSet['Add']['base_operation_log'] = [{
                            Operation_Type: '0',
                            Operation_Path: getRelativePath(),
                            Operation_Description: '删除数据',
                            Operation_Main,
                            Operation_Interface: "generalSaveByRequestBody",
                            Operation_IP: getIpAddress()
                        }]
                        console.log('保存请求数据:', JSON.stringify(lJSONObject_DataSet, null, 2));
                        const res = await generalApi.generalSaveByRequestBody({
                            Data: lJSONObject_DataSet
                        })
                        console.log('保存响应:', res);
                        if (res.Status == "success") {
                            this.$message.success("删除成功");
                            // 直接更新当前行的状态，不刷新整个列表（避免影响其他行）
                            const currentRowIndex = this.tableData.findIndex(item => item[primaryKey] === row[primaryKey]);
                            if (currentRowIndex !== -1) {
                                // 直接更新当前行的状态
                                this.$set(this.tableData[currentRowIndex], 'Row_Status', '1');
                                this.$set(this.tableData[currentRowIndex], 'Operation_ID', getCookie('user') || '');
                                this.$set(this.tableData[currentRowIndex], 'Operation_Datetime', getYMDHMSDate());
                            }
                            // 不刷新整个列表，避免影响其他行的状态
                            // 如果需要看到最新数据，用户可以手动刷新或重新查询
                        } else {
                            this.$message.error("删除失败，请重试！");
                        }
                    } else {
                        this.$message.error("未找到该门店数据！");
                    }
                } catch (error) {
                    console.error('删除操作错误：', error);
                    this.$message({
                        message: '系统错误，请联系开发者!',
                        type: 'error'
                    })
                } finally {
                    this.loading = false;
                }
            }).catch(() => {
                // 用户取消操作，不做任何处理
            });
        },
        handleDetail(row){
            try {
                const { primaryKey } = $('#table').data('options');
                window.location.href = "./add.html?action=Modify&type=1&nodeKey=" + row[primaryKey];
            } catch (error) {
                console.error(error);
                this.$message({
                    message: '系统错误，请联系开发者!',
                    type: 'error'
                })
            }
        }
    }
})
